<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">

<title>class Thread::Backtrace::Location - RDoc Documentation</title>


<script src="../../js/navigation.js" defer></script>
<script src="../../js/search.js" defer></script>
<script src="../../js/search_index.js" defer></script>
<script src="../../js/searcher.js" defer></script>
<script src="../../js/darkfish.js" defer></script>

<script src="../../js/jquery-3.2.0.min.js"></script>

<script src="../../js/vue.min.js"></script>
<script src="../../js/js.cookie.min.js"></script>

<link href="../../css/fonts.css" rel="stylesheet">
<link id='rdoccss' href="../../css/rdoc.css" rel="stylesheet">
<link href="../../css/carbon17.css" rel="stylesheet">

<script type="text/javascript">
  var rdoc_rel_prefix = "../../";
  var index_rel_prefix = "../../";
  var darkModeCsseHref = "../../css/rdoc-dm.css"
  var defaultModeCssHref = "../../css/rdoc.css"
  // var cssDarkmode = Cookies.get('darkmode');
  
  if( Cookies.get("darkmode") == "true") {
	$('#rdoccss').attr("href", darkModeCsseHref);
}

//  https://cssdeck.com/blog/simple-jquery-stylesheet-switcher/

document.write('<style type="text/css">body{display:none}</style>');

</script>


</head>
<body id="top" role="document" class="class">
  <!-- this is class.html -->

  <div id='actionbar' >
    <div class='wrapper mdiv'>
      <ul class='grids g0'></ul>
    </div> 
    <!-- VERSION HEADER for 3.3.0-preview2 NOT FOUND -->
  </div> <!-- end action bar -->

  <div class='wrapper hdiv'>

    


    <nav id='vapp' role="navigation">
    <div id="project-navigation">
      <div id="home-section" role="region" title="Quick navigation" class="nav-section">
  <h2><a href="../../index.html" rel="home">Home</a></h2>

  <div id="table-of-contents-navigation"  >
    <a href="../../table_of_contents.html#pages">Pages</a>
    <a href="../../table_of_contents.html#classes">Classes</a>
    <a href="../../table_of_contents.html#methods">Methods</a>
  </div>
</div>

      <div id="search-section" role="search" class="project-section initially-hidden">
  <form action="#" method="get" accept-charset="utf-8">
    <div id="search-field-wrapper">
      <input id="search-field" role="combobox" aria-label="Search"
             aria-autocomplete="list" aria-controls="search-results"
             type="text" name="search" placeholder="Search" spellcheck="false"
             title="Type to search, Up and Down to navigate, Enter to load">
    </div>

    <ul id="search-results" aria-label="Search Results"
        aria-busy="false" aria-expanded="false"
        aria-atomic="false" class="initially-hidden"></ul>
  </form>
</div>

    </div>


    

    <button id='toggleThing' @click="toggleNav()" >Show/hide navigation</button>
    <div :class="isOpen ? 'block' : 'hidden' " id='toggleMe'>
      <div id="class-metadata">
        
        
<div id="parent-class-section" class="nav-section">
  <h3>Parent</h3>

  <p class="link"><a href="../../Object.html">Object</a>
</div>

        
        
        
<!-- Method Quickref -->
<div id="method-list-section" class="nav-section">
  <h3>Methods</h3>

  <ul class="link-list" role="directory">
    <li ><a href="#method-i-absolute_path">#absolute_path</a>
    <li ><a href="#method-i-base_label">#base_label</a>
    <li ><a href="#method-i-inspect">#inspect</a>
    <li ><a href="#method-i-label">#label</a>
    <li ><a href="#method-i-lineno">#lineno</a>
    <li ><a href="#method-i-path">#path</a>
    <li ><a href="#method-i-to_s">#to_s</a>
  </ul>
</div>

      </div>
     </div>
    </nav>


    <div id='extraz'><div class='adzbox-index'  >
      
     </div>         
    </div>

    <main role="main" aria-labelledby="class-Thread::Backtrace::Location">
    <h1 id="class-Thread::Backtrace::Location" class="class">
      class Thread::Backtrace::Location
    </h1>

    <section class="description">
    
<p>An object representation of a stack frame, initialized by <a href="../../Kernel.html#method-i-caller_locations"><code>Kernel#caller_locations</code></a>.</p>

<p>For example:</p>

<pre class="ruby"><span class="ruby-comment"># caller_locations.rb</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">a</span>(<span class="ruby-identifier">skip</span>)
  <span class="ruby-identifier">caller_locations</span>(<span class="ruby-identifier">skip</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">b</span>(<span class="ruby-identifier">skip</span>)
  <span class="ruby-identifier">a</span>(<span class="ruby-identifier">skip</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">c</span>(<span class="ruby-identifier">skip</span>)
  <span class="ruby-identifier">b</span>(<span class="ruby-identifier">skip</span>)
<span class="ruby-keyword">end</span>

<span class="ruby-identifier">c</span>(<span class="ruby-value">0</span><span class="ruby-operator">..</span><span class="ruby-value">2</span>).<span class="ruby-identifier">map</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">call</span><span class="ruby-operator">|</span>
  <span class="ruby-identifier">puts</span> <span class="ruby-identifier">call</span>.<span class="ruby-identifier">to_s</span>
<span class="ruby-keyword">end</span>
</pre>

<p>Running <code>ruby caller_locations.rb</code> will produce:</p>

<pre>caller_locations.rb:2:in `a&#39;
caller_locations.rb:5:in `b&#39;
caller_locations.rb:8:in `c&#39;</pre>

<p>Here’s another example with a slightly different result:</p>

<pre class="ruby"><span class="ruby-comment"># foo.rb</span>
<span class="ruby-keyword">class</span> <span class="ruby-constant">Foo</span>
  <span class="ruby-identifier">attr_accessor</span> <span class="ruby-value">:locations</span>
  <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">initialize</span>(<span class="ruby-identifier">skip</span>)
    <span class="ruby-ivar">@locations</span> = <span class="ruby-identifier">caller_locations</span>(<span class="ruby-identifier">skip</span>)
  <span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>

<span class="ruby-constant">Foo</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value">0</span><span class="ruby-operator">..</span><span class="ruby-value">2</span>).<span class="ruby-identifier">locations</span>.<span class="ruby-identifier">map</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">call</span><span class="ruby-operator">|</span>
  <span class="ruby-identifier">puts</span> <span class="ruby-identifier">call</span>.<span class="ruby-identifier">to_s</span>
<span class="ruby-keyword">end</span>
</pre>

<p>Now run <code>ruby foo.rb</code> and you should see:</p>

<pre>init.rb:4:in `initialize&#39;
init.rb:8:in `new&#39;
init.rb:8:in `&lt;main&gt;&#39;</pre>

    </section>

      <section id="5Buntitled-5D" class="documentation-section">





                <section id="public-instance-5Buntitled-5D-method-details" class="method-section">
                <header>
                <h3>Public Instance Methods</h3>
                </header>

                  <div id="method-i-absolute_path" class="method-detail ">
                            <div class="method-heading">
                              <span class="method-name">absolute_path</span><span
                                class="method-args">()</span>
                              <span class="method-click-advice">click to toggle source</span>
                            </div>

                            <div class="method-description">
                              <p>Returns the full file path of this frame.</p>

<p>Same as <a href="Location.html#method-i-path"><code>path</code></a>, except that it will return absolute path even if the frame is in the main script.</p>

                              <div class="method-source-code" id="absolute_path-source">
            <pre>static VALUE
location_absolute_path_m(VALUE self)
{
    return location_realpath(location_ptr(self));
}</pre>
                              </div>
                            </div>


                          </div>

                  <div id="method-i-base_label" class="method-detail ">
                            <div class="method-heading">
                              <span class="method-name">base_label</span><span
                                class="method-args">()</span>
                              <span class="method-click-advice">click to toggle source</span>
                            </div>

                            <div class="method-description">
                              <p>Returns the base label of this frame.</p>

<p>Usually same as <a href="Location.html#method-i-label"><code>label</code></a>, without decoration.</p>

                              <div class="method-source-code" id="base_label-source">
            <pre>static VALUE
location_base_label_m(VALUE self)
{
    return location_base_label(location_ptr(self));
}</pre>
                              </div>
                            </div>


                          </div>

                  <div id="method-i-inspect" class="method-detail ">
                            <div class="method-heading">
                              <span class="method-name">inspect</span><span
                                class="method-args">()</span>
                              <span class="method-click-advice">click to toggle source</span>
                            </div>

                            <div class="method-description">
                              <p>Returns the same as calling <code>inspect</code> on the string representation of to_str</p>

                              <div class="method-source-code" id="inspect-source">
            <pre>static VALUE
location_inspect_m(VALUE self)
{
    return rb_str_inspect(location_to_str(location_ptr(self)));
}</pre>
                              </div>
                            </div>


                          </div>

                  <div id="method-i-label" class="method-detail ">
                            <div class="method-heading">
                              <span class="method-name">label</span><span
                                class="method-args">()</span>
                              <span class="method-click-advice">click to toggle source</span>
                            </div>

                            <div class="method-description">
                              <p>Returns the label of this frame.</p>

<p>Usually consists of method, class, module, etc names with decoration.</p>

<p>Consider the following example:</p>

<pre class="ruby"><span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">foo</span>
  <span class="ruby-identifier">puts</span> <span class="ruby-identifier">caller_locations</span>(<span class="ruby-value">0</span>).<span class="ruby-identifier">first</span>.<span class="ruby-identifier">label</span>

  <span class="ruby-value">1</span>.<span class="ruby-identifier">times</span> <span class="ruby-keyword">do</span>
    <span class="ruby-identifier">puts</span> <span class="ruby-identifier">caller_locations</span>(<span class="ruby-value">0</span>).<span class="ruby-identifier">first</span>.<span class="ruby-identifier">label</span>

    <span class="ruby-value">1</span>.<span class="ruby-identifier">times</span> <span class="ruby-keyword">do</span>
      <span class="ruby-identifier">puts</span> <span class="ruby-identifier">caller_locations</span>(<span class="ruby-value">0</span>).<span class="ruby-identifier">first</span>.<span class="ruby-identifier">label</span>
    <span class="ruby-keyword">end</span>

  <span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
</pre>

<p>The result of calling <code>foo</code> is this:</p>

<pre>label: foo
label: block in foo
label: block (2 levels) in foo</pre>

                              <div class="method-source-code" id="label-source">
            <pre>static VALUE
location_label_m(VALUE self)
{
    return location_label(location_ptr(self));
}</pre>
                              </div>
                            </div>


                          </div>

                  <div id="method-i-lineno" class="method-detail ">
                            <div class="method-heading">
                              <span class="method-name">lineno</span><span
                                class="method-args">()</span>
                              <span class="method-click-advice">click to toggle source</span>
                            </div>

                            <div class="method-description">
                              <p>Returns the line number of this frame.</p>

<p>For example, using <code>caller_locations.rb</code> from <a href="Location.html"><code>Thread::Backtrace::Location</code></a></p>

<pre class="ruby"><span class="ruby-identifier">loc</span> = <span class="ruby-identifier">c</span>(<span class="ruby-value">0</span><span class="ruby-operator">..</span><span class="ruby-value">1</span>).<span class="ruby-identifier">first</span>
<span class="ruby-identifier">loc</span>.<span class="ruby-identifier">lineno</span> <span class="ruby-comment">#=&gt; 2</span>
</pre>

                              <div class="method-source-code" id="lineno-source">
            <pre>static VALUE
location_lineno_m(VALUE self)
{
    return INT2FIX(location_lineno(location_ptr(self)));
}</pre>
                              </div>
                            </div>


                          </div>

                  <div id="method-i-path" class="method-detail ">
                            <div class="method-heading">
                              <span class="method-name">path</span><span
                                class="method-args">()</span>
                              <span class="method-click-advice">click to toggle source</span>
                            </div>

                            <div class="method-description">
                              <p>Returns the file name of this frame. This will generally be an absolute path, unless the frame is in the main script, in which case it will be the script location passed on the command line.</p>

<p>For example, using <code>caller_locations.rb</code> from <a href="Location.html"><code>Thread::Backtrace::Location</code></a></p>

<pre class="ruby"><span class="ruby-identifier">loc</span> = <span class="ruby-identifier">c</span>(<span class="ruby-value">0</span><span class="ruby-operator">..</span><span class="ruby-value">1</span>).<span class="ruby-identifier">first</span>
<span class="ruby-identifier">loc</span>.<span class="ruby-identifier">path</span> <span class="ruby-comment">#=&gt; caller_locations.rb</span>
</pre>

                              <div class="method-source-code" id="path-source">
            <pre>static VALUE
location_path_m(VALUE self)
{
    const rb_iseq_t *iseq = location_iseq(location_ptr(self));
    return iseq ? rb_iseq_path(iseq) : Qnil;
}</pre>
                              </div>
                            </div>


                          </div>

                  <div id="method-i-to_s" class="method-detail ">
                            <div class="method-heading">
                              <span class="method-name">to_s</span><span
                                class="method-args">()</span>
                              <span class="method-click-advice">click to toggle source</span>
                            </div>

                            <div class="method-description">
                              <p>Returns a <a href="../../Kernel.html#method-i-caller"><code>Kernel#caller</code></a> style string representing this frame.</p>

                              <div class="method-source-code" id="to_s-source">
            <pre>static VALUE
location_to_str_m(VALUE self)
{
    return location_to_str(location_ptr(self));
}</pre>
                              </div>
                            </div>


                          </div>

                          </section>

              </section>
              </main>



            </div>  <!--  class='wrapper hdiv' -->


<footer id="validator-badges" role="contentinfo">
<p><a href="https://validator.w3.org/check/referer">Validate</a></p>
<p>Generated by <a href="https://ruby.github.io/rdoc/">RDoc</a> 6.4.0.</p>
<p>Based on <a href="https://github.com/ged/darkfish/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.</p>

  
    <p><p><a href="https://ruby-doc.org">Ruby-doc.org</a> is provided by <a href="https://jamesbritt.com">James Britt</a> and <a href="https://neurogami.com">Neurogami</a>.</p><p><a href="https://jamesbritt.bandcamp.com/">Maximum R+D</a>.  </p>
</p>
  
  </footer>

<script type="text/javascript">


  let ads  = $("#carbonads-container").children().detach();


  function swapMode() {
    var cookieName = 'darkmode';
    var cssDarkmode = Cookies.get(cookieName);
    console.log("***** swapMode! " + cssDarkmode + " *****");


    if (cssDarkmode == "true") {
      console.log("We have dark mode, set the css to light ...");
      $('#rdoccss').attr("href", defaultModeCssHref);
      $('#cssSelect').text("Dark mode");
      cssDarkmode = "false";
      console.log("swapMode! Now set cookie to " + cssDarkmode);
      Cookies.set(cookieName, cssDarkmode);

    } else {
      console.log("We not have dark mode, set the css to dark ...");
      $('#rdoccss').attr("href", darkModeCsseHref);
      $('#cssSelect').text("Light mode");
      cssDarkmode = "true";
      console.log("swapMode! Now set cookie to " + cssDarkmode);
      Cookies.set(cookieName, cssDarkmode);

    }

    console.log("  --------------- ");
  }


const vueCssApp = new Vue({
el: '#menubar',
data: {
isDark: false
},
methods: {
toggleClass: function(event){
this.isDark = !this.isDark;
}
}
})

const vueApp = new Vue({
el: '#vapp',
data: { 
isOpen: true
},

mounted() {
this.handleResize();
this.manage_mob_classes();
window.addEventListener('resize', this.handleResize)
//this.isOpen !=  (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent));
},
destroyed() {
window.removeEventListener('resize', this.handleResize)
},
created() {
//manage_mob_classes();
},

methods : {
isMobile() {
  return (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent));
},

  handleResize() {
    if (!this.isMobile()) {
      this.isOpen = window.innerWidth > 800;
    }
  },

  manage_mob_classes() {
    if (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)) {
      $("nav").addClass("mob_nav");
      $("main").addClass("mob_main");
      $("#extraz").addClass("mob_extraz");
      $("#carbonads-container").addClass("mob_carbonads-container");
      this.isOpen  = false;
    } else {
      $("nav").removeClass("mob_nav") 
        $("main").removeClass("mob_main");
      $("#extraz").removeClass("mob_extraz");
      $("#carbonads-container").removeClass("mob_carbonads-container");
      this.isOpen  = true;
    }
  },

  toggleNav() {
    this.isOpen =! this.isOpen ;
    // alert("Toggle nav!");
    console.log("toggleNav() click: " + this.isOpen );
  }
}
})

$("#carbonads-container").append(ads);


$(function() {

    var darkmode = Cookies.get("darkmode");
    console.log("Document ready: " + darkmode);

    if ( darkmode  == "true" ) {
      $('#cssSelect').text("Light mode");
    } else {
      $('#cssSelect').text("Dark mode");
     }

    $('body').css('display','block');
    });

</script>

    
  </body> 
</html>

